package com.zaimokuza.cn.mapper;

import com.github.pagehelper.Page;
import com.zaimokuza.cn.entity.user.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.ArrayList;

/**
 * @author zaimokuza
 */
@Mapper
public interface UserMapper {

    /**
     * 添加用户
     *
     * @param detailedUser 用户
     */
    void insertUserRecord(DetailedUser detailedUser);

    /**
     * 添加用户登录记录
     *
     * @param userId 用户ID
     */
    void insertUserLoginRecord(String userId);

    /**
     * 更新用户
     *
     * @param detailedUser 用户
     */
    void updateUserRecord(DetailedUser detailedUser);

    /**
     * 根据手机号查询用户信息
     *
     * @param phone 手机号
     * @return 用户信息
     */
    SecurityUser querySecurityUserByPhone(String phone);

    /**
     * 根据用户ID查询用户登录的信息
     *
     * @param userId 用户ID
     * @return 登录信息
     */
    LoginUser queryLoginUser(String userId);

    /**
     * 查询用户简要信息
     *
     * @param briefUser 查询条件
     * @param userId    当前用户ID，用户关联关注信息
     * @return 用户简要信息
     */
    BriefUser queryBriefUser(@Param("param") BriefUser briefUser, @Param("userId") String userId);

    /**
     * 根据用户ID查询用户详细信息
     *
     * @param id 用户ID
     * @return 用户详细信息
     */
    DetailedUser queryDetailedUser(String id);

    /**
     * 查询推荐用户集合
     *
     * @param userId 当前用户ID，用户关联关注信息
     * @return 推荐用户集合
     */
    ArrayList<BriefUser> queryRecommendUserList(String userId);

    /**
     * 根据搜索内容查询用户集合
     *
     * @param name   名称
     * @param userId 当前用户ID，用户关联关注信息
     * @param time   时间
     * @return 用户集合
     */
    ArrayList<BriefUser> querySearchUserList(@Param("name") String name, @Param("userId") String userId, @Param("time") String time);

    /**
     * 根据用户域名查询粉丝用户集合
     *
     * @param domain 用户域名
     * @param userId 当前用户ID，用户关联关注信息
     * @return 粉丝用户集合
     */
    Page<BriefUser> queryFollowerPage(@Param("domain") String domain, @Param("userId") String userId);

    /**
     * 根据用户域名查询关注用户集合
     *
     * @param domain 用户域名
     * @param userId 当前用户ID，用户关联关注信息
     * @return 关注用户集合
     */
    Page<BriefUser> queryFollowingPage(@Param("domain") String domain, @Param("userId") String userId);

    /**
     * 查询联络人分页集合
     *
     * @param userId 当前用户ID
     * @return 联络人分页集合
     */
    Page<ContactUser> queryContactUserPage(String userId);

    /**
     * 查询用户分页集合
     *
     * @param briefUser 查询条件
     * @param userId    当前用户ID，用户关联关注信息
     * @return 用户分页集合
     */
    Page<BriefUser> queryBriefUserPage(@Param("param") BriefUser briefUser, @Param("userId") String userId);

    /**
     * 查询用户名称是否被使用
     *
     * @param userId 用户ID
     * @param name   名称
     * @return 1:被使用；null：未使用
     */
    Integer queryNameIsRepeat(@Param("userId") String userId, @Param("name") String name);

    /**
     * 查询用户域名是否被使用
     *
     * @param userId 用户ID
     * @param domain 域名
     * @return 1:被使用；null：未使用
     */
    Integer queryDomainIsRepeat(@Param("userId") String userId, @Param("phone") String domain);

    /**
     * 查询用户手机号是否被使用
     *
     * @param userId 用户ID
     * @param phone  手机号
     * @return 1:被使用；null：未使用
     */
    Integer queryPhoneIsRepeat(@Param("userId") String userId, @Param("phone") Long phone);

    /**
     * 根据用户ID查询用户名称
     *
     * @param id 用户ID
     * @return 用户名称
     */
    String queryUserNameById(String id);

    /**
     * 查询所有用户ID集合
     *
     * @return 用户ID数组
     */
    ArrayList<String> queryUserIdList();

}
